package com.javarush.test.level20.lesson02.task02;

import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/* Читаем и пишем в файл: JavaRush
Реализуйте логику записи в файл и чтения из файла для класса JavaRush
В файле your_file_name.tmp может быть несколько объектов JavaRush
Метод main реализован только для вас и не участвует в тестировании
*/
public class Solution {
    public static void main(String[] args) {
        //you can find your_file_name.tmp in your TMP directory or fix outputStream/inputStream according to your real file location
        //вы можете найти your_file_name.tmp в папке TMP или исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {
            File tempFile = File.createTempFile("D:\\temp.tmp", null);
            OutputStream outputStream = new FileOutputStream("D:\\temp.tmp");
            InputStream inputStream = new FileInputStream("D:\\temp.tmp");

            JavaRush javaRush = new JavaRush();
            User one=new User();
            User two=new User();
            one.setBirthDate(new Date(1950,12,2));
            one.setFirstName("maks");
            one.setLastName("P");
            one.setMale(false);
            one.setCountry(User.Country.UKRAINE);
            two.setBirthDate(new Date());
            two.setFirstName("katya");
            two.setLastName("pppp");
            two.setMale(true);
            two.setCountry(User.Country.OTHER);

            javaRush.users.add(one);
            javaRush.users.add(two);
            javaRush.save(outputStream);
            outputStream.flush();
            outputStream.close();

            JavaRush loadedObject = new JavaRush();
            loadedObject.load(inputStream);
            //check here that javaRush object equals to loadedObject object - проверьте тут, что javaRush и loadedObject равны


            inputStream.close();

        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with my file");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Oops, something wrong with save/load method");
        }
    }

    public static class JavaRush {
        public List<User> users = new ArrayList<>();

        public void save(OutputStream outputStream) throws Exception {
            PrintWriter writer=new PrintWriter(outputStream);
            for(User user:users){
                writer.println("newUser");

                if(user.getFirstName()==null) writer.println("empty");
                else writer.println(user.getFirstName());

                if(user.getLastName()==null) writer.println("empty");
                else writer.println(user.getLastName());

                if(user.getBirthDate()==null) writer.println("empty");
                else writer.println(user.getBirthDate().getTime());

                writer.println(user.isMale());

                if(user.getCountry()==null) writer.println("empty");
                else writer.println(user.getCountry().getDisplayedName());
            }
            writer.println("end");

            writer.flush();

        }

        public void load(InputStream inputStream) throws Exception {
            BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
            //int counter=0;
            String str;
            while ((str=reader.readLine()).equals("newUser"))
            {
                User user=new User();
                users.add(user);
                str=reader.readLine();
                if(!str.equals("empty")) user.setFirstName(str);
                str=reader.readLine();
                if(!str.equals("empty")) user.setLastName(str);
                str=reader.readLine();
                if(!str.equals("empty")) {
                    Date date=new Date();
                    date.setTime(Long.parseLong(str));
                    user.setBirthDate(date);

                }
                str=reader.readLine();
                if(str.equals("true"))
                    user.setMale(true);
                str=reader.readLine();
                if(!str.equals("empty")){
                    if(str.equals("Ukraine"))user.setCountry(User.Country.UKRAINE);
                    if(str.equals("Russia"))user.setCountry(User.Country.RUSSIA);
                    if(str.equals("Other"))user.setCountry(User.Country.OTHER);
                }
            }
        }
    }
}
